package com.hw.saoauth;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 *
 * 配置 hosts
 * 127.0.0.1 oauth-server.com
 * 127.0.0.1 oauth-client.com
 * 认证配置：
 * client_id=HW0000
 * client_secret=aaaa-bbbb-cccc-dddd-eeee
 * scope=userinfo
 * response_type=code
 * redirect_uri=https://sa-token.cc
 *
 * 模式一：授权码模式（code 标准模式）
 *
 * 获取授权码过程：
 * 1、访问授权地址获取授权码：访问授权地址时，如果未登录未授权会执行 后续的2-4 步骤，如果已登录并授权，则直接到步骤4
 * http://oauth-server.com:9000/oauth2/authorize?response_type=code&client_id=HW0000&scope=userinfo&redirect_uri=https://sa-token.cc&state=hewei
 * 2、未登录则跳转到 oauth2-server 的登录视图，进行登录：
 * http://oauth-server.com:9000/oauth2/doLogin?name=sa&pwd=123456
 * 3、登录之后若未授权则跳转到授权界面，确认授权：
 * http://oauth-server.com:9000/oauth2/doConfirm?client_id=HW0000&scope=userinfo
 * 4、授权之后会转到目标网页并携带授权码，如下：
 * https://sa-token.cc/?code=nFbPNC5LN0EAZwSFQ0d01JbOBeMAHKPide7DvM0l7cckRdXrT4pyMLXaLOaw
 * 5、通过授权码获得 accessToken信息（包含 accessToken 和 refreshToken）：
 * http://oauth-server.com:9000/oauth2/token?grant_type=authorization_code&client_id=HW0000&client_secret=aaaa-bbbb-cccc-dddd-eeee&code=nFbPNC5LN0EAZwSFQ0d01JbOBeMAHKPide7DvM0l7cckRdXrT4pyMLXaLOaw
 *
 *
 * 模式二：隐藏式（Implicit）
 * 越过授权码的步骤，直接返回Access-Token到前端页面，形如：redirect_uri#token=xxxx-xxxx-xxxx-xxxx
 * http://oauth-server.com:9000/oauth2/authorize?response_type=token&client_id=HW0000&scope=userinfo&redirect_uri=https://sa-token.cc&state=hewei
 *
 * 模式三：密码式（Password）
 * 输入Server端的账号和密码，然后在Client端访问接口，返回json格式内容（包含 accessToken 和 refreshToken），适用于代码中接口授权
 * http://oauth-server.com:9000/oauth2/token?grant_type=password&client_id=HW0000&client_secret=aaaa-bbbb-cccc-dddd-eeee&username=sa&password=123456&scope=userinfo
 *
 * 模式四：凭证式（Client Credentials）
 * 以上三种模式获取的都是用户的 Access-Token，代表用户对第三方应用的授权， 在OAuth2.0中还有一种针对 Client级别的授权， 即：Client-Token，代表应用自身的资源授权
 * http://oauth-server.com:9000/oauth2/client_token?grant_type=client_credentials&client_id=HW0000&client_secret=aaaa-bbbb-cccc-dddd-eeee&scope=userinfo
 *
 * 刷新 accessToken
 * http://oauth-server.com:9000/oauth2/refresh?grant_type=refresh_token&client_id=HW0000&client_secret=aaaa-bbbb-cccc-dddd-eeee&refresh_token=ujixsAUh3fZuC3mN6NCr6phzJjkMx9Gcfh2jUbSa1KN1xcwWhuVGHkIRen5C
 * 回收 accessToken
 * http://oauth-server.com:9000/oauth2/revoke?client_id=HW0000&client_secret=aaaa-bbbb-cccc-dddd-eeee&access_token=AnaRxieXVEs4pCxUCXEFfh74Wz48xxE81xryC0Y0MxDeyJCgsKleCoaISDzB
 * 根据 accessToken 获取用户信息(自定义接口)
 * http://oauth-server.com:9000/oauth2/userinfo?access_token=AnaRxieXVEs4pCxUCXEFfh74Wz48xxE81xryC0Y0MxDeyJCgsKleCoaISDzB
 *
 * @author hewei
 */
@Slf4j
@SpringBootApplication
public class Oauth2ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(Oauth2ServerApplication.class, args);
        log.info("Sa-Token-OAuth2 Server 端启动成功");
    }

}
